home *** CD-ROM | disk | FTP | other *** search
/ A.C.E. 3 / ACE CD 3.iso / files / utils / crossdv6.dms / crossdv6.adf / Install < prev    next >
Text File  |  1995-04-04  |  18KB  |  569 lines

  1. ;********************************************************************
  2. ;Installation script for CrossDOS V6 Professional (no CrossPC)
  3. ;********************************************************************
  4.  
  5. ;$VER: Install 6.00 (29.3.95)
  6.  
  7. ;Bugs in Installer V1.22:
  8.  
  9. ;1. The "run" command does not accept a relative path.
  10. ;2. The tooltype delete feature is case-sensitive.
  11.  
  12. ;mycopylib is used because of installer limitations. It uses the following global
  13. ;strings as input:
  14. ;mysource - source
  15. ;mydest - destination
  16. ;mynewname - new name
  17.  
  18. (procedure mycopylib
  19.     (    (set errorflag 0)
  20.         ;form destination file
  21.         (set destfile (tackon mydest mynewname) )
  22.         (if (= 0 (exists destfile) ) 
  23.             (    (copyfiles (source mysource) (dest mydest) (newname mynewname) )
  24.                 (set errorflag 1)
  25.             )
  26.             (    ;the destfile exists, so we must check the versions
  27.                 (if (exists mysource)
  28.                     (    (set sourcevernum (getversion mysource))
  29.                         (set sourcever (/ sourcevernum 65536))
  30.                         (set sourcerev (- sourcevernum (* sourcever 65536)))
  31.                         (set destvernum (getversion destfile))
  32.                         (set destver (/ destvernum 65536))
  33.                         (set destrev (- destvernum (* destver 65536)))
  34.                         (if (or (or (not ks20) (> sourcever destver) )
  35.                                 (and (= sourcever destver) (>= sourcerev destrev) )
  36.                             )
  37.                             (    (copyfiles (source mysource) (dest mydest) (newname mynewname) )
  38.                                 (set errorflag 1)
  39.                             )
  40.                         )
  41.                     )
  42.                 )
  43.             )
  44.         )
  45.         (if (= errorflag 0)
  46.             ;Handle a version conflict
  47.             (if (= @user-level 2)
  48.                 (if (askbool
  49.                         (prompt ("The version of \"%s" mynewname)
  50.                                  "\" currently on your system appears to be "
  51.                                  "newer than the CrossDOS version. Select \"Skip\" to "
  52.                                  "preserve the version currently on your system, "
  53.                                  "or \"Overwrite\" to install the CrossDOS version "
  54.                                  "regardless."
  55.                         )
  56.                         (choices "Overwrite"
  57.                                  "Skip"
  58.                         )
  59.                         (help "This message should only appear if you are "
  60.                               "running Workbench 2.1 or later. If you are not, "
  61.                               "select Overwrite to copy the CrossDOS file anyway."
  62.                         )                            
  63.                     )
  64.                     (    (copyfiles (source mysource) (dest mydest) (newname mynewname) )
  65.                         (set errorflag 1)
  66.                     )
  67.                 )
  68.             )
  69.         )
  70.     )
  71. )
  72.  
  73. ;********************** CrossDOS UNinstallation **************************
  74. ;Enter with "deletedirstr" set to the name of the directory to terminate
  75. ;and deletepat with the amigados wildcards.
  76. (procedure deletedir
  77.     (if (= 2 (exists deletedirstr) )
  78.         (    (foreach deletedirstr deletepat
  79.                 (delete (tackon deletedirstr @each-name) )
  80.             )
  81.             (delete (tackon deletedirstr ".info") )
  82.             (delete deletedirstr)
  83.             (delete ("%s.info" deletedirstr) )
  84.         )
  85.     )
  86. )
  87.  
  88. (procedure DeleteOldCD
  89.   (    ;misc
  90.     (delete "sys:wbstartup/mountmf")
  91.     (delete "sys:wbstartup/mountmf.info")
  92.  
  93. ;sys:system
  94.     (delete "sys:system/diskchg")
  95.     (delete "sys:system/diskchk")
  96.     (delete "sys:system/IntlTrans")
  97.     (delete "sys:system/kill")
  98.     (delete "sys:system/mdiskcopy")
  99.     (delete    "sys:system/mformat")
  100.     (delete "sys:system/txfilter")
  101.  
  102.     (delete "sys:system/diskchg.info")
  103.     (delete "sys:system/diskchk.info")
  104.     (delete "sys:system/IntlTrans.info")
  105.     (delete "sys:system/kill.info")
  106.     (delete "sys:system/mdiskcopy.info")
  107.     (delete    "sys:system/mformat.info")
  108.     (delete "sys:system/txfilter.info")
  109.  
  110.     (delete "sys:system/Atari_S9.MFormat.info")
  111.     (delete "sys:system/Atari_D9.MFormat.info")
  112.     (delete "sys:system/MSDOS_D9.MFormat.info")
  113.     (delete "sys:system/MSDOS_S9.MFormat.info")
  114.     (delete "sys:system/MSDOS_QD9.MFormat.info")
  115.     (delete "sys:system/MSDOS_Q18.MFormat.info")
  116.  
  117.     (delete "sys:system/DiskChg.di0.info")
  118.     (delete "sys:system/DiskChg.di1.info")
  119.     (delete "sys:system/DiskChg.di2.info")
  120.     (delete "sys:system/DiskChg.di3.info")
  121.  
  122.     (delete "sys:system/Kill.di0.info")
  123.     (delete "sys:system/Kill.di1.info")
  124.     (delete "sys:system/Kill.di2.info")
  125.     (delete "sys:system/Kill.di3.info")
  126.  
  127.     (delete "sys:system/TxFilter.di0.info")
  128.     (delete "sys:system/TxFilter.di1.info")
  129.     (delete "sys:system/TxFilter.di2.info")
  130.     (delete "sys:system/TxFilter.di3.info")
  131.  
  132. ;sys:crossdos
  133.     (delete "sys:crossdos/diskchg")
  134.     (delete "sys:crossdos/diskchk")
  135.     (delete "sys:crossdos/IntlTrans")
  136.     (delete "sys:crossdos/kill")
  137.     (delete "sys:crossdos/mdiskcopy")
  138.     (delete    "sys:crossdos/mformat")
  139.     (delete "sys:crossdos/txfilter")
  140.  
  141.     (delete "sys:crossdos/diskchg.info")
  142.     (delete "sys:crossdos/diskchk.info")
  143.     (delete "sys:crossdos/IntlTrans.info")
  144.     (delete "sys:crossdos/kill.info")
  145.     (delete "sys:crossdos/mdiskcopy.info")
  146.     (delete    "sys:crossdos/mformat.info")
  147.     (delete "sys:crossdos/txfilter.info")
  148.  
  149.     (delete "sys:crossdos/Atari_S9.MFormat.info")
  150.     (delete "sys:crossdos/Atari_D9.MFormat.info")
  151.     (delete "sys:crossdos/MSDOS_D9.MFormat.info")
  152.     (delete "sys:crossdos/MSDOS_S9.MFormat.info")
  153.     (delete "sys:crossdos/MSDOS_QD9.MFormat.info")
  154.     (delete "sys:crossdos/MSDOS_Q18.MFormat.info")
  155.  
  156.     (delete "sys:crossdos/DiskChg.di0.info")
  157.     (delete "sys:crossdos/DiskChg.di1.info")
  158.     (delete "sys:crossdos/DiskChg.di2.info")
  159.     (delete "sys:crossdos/DiskChg.di3.info")
  160.  
  161.     (delete "sys:crossdos/Kill.di0.info")
  162.     (delete "sys:crossdos/Kill.di1.info")
  163.     (delete "sys:crossdos/Kill.di2.info")
  164.     (delete "sys:crossdos/Kill.di3.info")
  165.  
  166.     (delete "sys:crossdos/TxFilter.di0.info")
  167.     (delete "sys:crossdos/TxFilter.di1.info")
  168.     (delete "sys:crossdos/TxFilter.di2.info")
  169.     (delete "sys:crossdos/TxFilter.di3.info")
  170.  
  171.     (delete "sys:crossdos/.info")
  172.     (delete "sys:crossdos")
  173.  
  174.     (if (not (exists "sys:crossdos") )
  175.         (delete "sys:crossdos.info")
  176.     )
  177.  
  178. ;CrossDOS V5+
  179.     (delete "l:MSDOSFileSystem")
  180.     (delete "l:CrossDOSFileSystem")
  181.     (delete "c:TDPatch12")
  182.     (delete "c:TDPatch13")
  183.     (delete "sys:system/CDFormat")
  184.     (delete "sys:system/CDFormat.info")
  185.     (delete "sys:system/CDDiskcopy")
  186.     (delete "sys:system/CDDiskcopy.info")
  187.     (delete "sys:system/CDMount")
  188.     (delete "sys:system/CDMount.info")
  189.  
  190.     (delete "sys:system/CrossDOS")
  191.     (delete "sys:system/CrossDOS.info")
  192.     (delete "sys:system/DiskChg")
  193.     (delete "sys:system/DiskChg.info")
  194.     (delete "devs:dosdrivers/pc0")
  195.     (delete "devs:dosdrivers/pc1")
  196.     (delete "devs:dosdrivers/pc2")
  197.     (delete "devs:dosdrivers/pc3")
  198.     (delete "devs:dosdrivers/pc0.info")
  199.     (delete "devs:dosdrivers/pc1.info")
  200.     (delete "devs:dosdrivers/pc2.info")
  201.     (delete "devs:dosdrivers/pc3.info")
  202.     (set deletedirstr "l:FileSystem_Trans")
  203.     (set deletepat "#?.crossdos")
  204.     (deletedir)
  205.   )
  206. )
  207.  
  208.  
  209. (procedure UnInstallCrossDOS
  210.     (if (askbool
  211.             (prompt "About to UNinstall CrossDOS: This function will try to "
  212.                     "remove CrossDOS completely from your system. "
  213.                     "Are you sure you want to uninstall CrossDOS?"
  214.             )
  215.             (help "This function will try to remove CrossDOS from your system "
  216.                   "to the extent that it is possible to do so safely. Some parts "
  217.                   "of CrossDOS \(such as replacement Mount, Format, and Diskcopy "
  218.                   "commands\) will not be removed, because doing so might "
  219.                   "disrupt the normal functioning of the system. Only in very "
  220.                   "extreme cases should you find it neccessary to revert to the "
  221.                   "to the original \(Commodore-supplied\) commands."
  222.             )
  223.         )
  224.         (    (DeleteOldCD)
  225.  
  226.             ;Comment-out the main mount command from the user-startup
  227.             (if (exists "s:user-startup")
  228.                 (    (startup "CrossDOSV5+ - automatically mount all devices"
  229.                         (help "This procedure only affects the main mount command placed "
  230.                               "in the user-startup by the CrossDOS installation. After uninstallation, "
  231.                               "the command will still be present in exactly the same form, "
  232.                               "but it will be preceded by a \";\" character, thereby nullifying its "
  233.                               "effects."
  234.                         )
  235.                         (prompt ("This step will disable the CrossDOS Mount commmand in the "
  236.                                     "user-startup that normally mounts all devices in the "
  237.                                     "devs:DOSDrivers directory. (Other mount statements are unaffected). "
  238.                                     "If you wish to preserve this "
  239.                                     "functionality, you may choose to skip this part."
  240.                                 )
  241.                         )
  242.                         (command ";Mount >nil: devs:DOSDrivers/~(#?.info)" )
  243.                     )
  244.                 )
  245.             )
  246.             (message "Finished UnInstalling CrossDOS. If you have manually moved "
  247.                      "parts of CrossDOS from their normal location, those files "
  248.                      "are still on your disk."
  249.             )
  250.         )
  251.     )
  252. )
  253.  
  254. ;********************** CrossDOS installation **************************
  255. (procedure ModifyStartup
  256.     (startup "CrossDOSV5+ - automatically mount all devices"
  257.         (prompt "About to install a command in s:user-startup to automatically "
  258.                 "start CrossDOS when you boot your system..."
  259.         )
  260.         (help "Normally you want CrossDOS to be automatically invoked every "
  261.               "time you start your system."
  262.         )
  263.         (command "Mount >nil: devs:DOSDrivers/~(#?.info)")
  264.     )
  265. )
  266.  
  267. (procedure InstallCrossDOS
  268.     (    (message "About to install CrossDOS...")
  269.  
  270.         ;Delete an old installation of CrossDOS
  271.         (if (exists "l:msdosfilesystem")
  272.             (set old 1)    ;if old
  273.             (set old 0)    ;if not old
  274.         )
  275.         (if old
  276.             (    (message "About to delete a previous CrossDOS installation...")
  277.                 (DeleteOldCD)
  278.             )
  279.             (    (delete "sys:system/CDFormat")
  280.                 (delete "sys:system/CDFormat.info")
  281.                 (delete "sys:system/CDDiskcopy")
  282.                 (delete "sys:system/CDDiskcopy.info")
  283.                 (delete "sys:system/CDMount")
  284.                 (delete "sys:system/CDMount.info")
  285.             )
  286.         )
  287.  
  288.         ;Replace old MountMF command
  289.         (if (exists "sys:mountmf")
  290.             (copyfiles (source ":c/MountMF") (dest "sys:") )
  291.         )
  292.         (if (exists "sys:crossdos/mountmf")
  293.             (copyfiles (source ":c/MountMF") (dest "sys:CrossDOS") )
  294.         )
  295.         (if (exists "c:mountmf")
  296.             (copyfiles (source ":c/MountMF") (dest "c:") )
  297.         )
  298.  
  299.         ;Create certain directories if they don't exist
  300.         (makedir "l:FileSystem_Trans" (infos) )
  301.         (makedir "sys:system" (infos) )
  302.  
  303.         ;The purpose of this is to create an icon for the devs: directory if needed.
  304.         (makedir (getassign "devs") (infos) )
  305.         (makedir "devs:DOSDrivers" (infos) )
  306.  
  307.         ;Install mfm.device
  308.         (set mysource "devs/mfm.device")
  309.         (set mydest "devs:")
  310.         (set mynewname "mfm.device")
  311.         (mycopylib)
  312.  
  313.         ;Install Mount command
  314.         (set mysource ":c/Mount")
  315.         (set mydest "c:")
  316.         (set mynewname "Mount")
  317.         (mycopylib)
  318.  
  319.         ;Install CrossDOSFileSystem
  320.         (set mysource ":l/CrossDOSFileSystem")
  321.         (set mydest "l:")
  322.         (set mynewname "CrossDOSFileSystem")
  323.         (mycopylib)
  324.  
  325.         ;Copy devs:dosdrivers
  326.         (foreach ":" "PC?"
  327.             (    (copyfiles (source (":%s" @each-name) ) (dest "devs:DOSDrivers") )
  328.                 (if (not (exists (":%s.info" @each-name) (noreq)))
  329.                     (copyfiles (source (":%s.info" @each-name) ) (dest "devs:DOSDrivers") )
  330.                 )
  331.                 (tooltype (dest ("devs:DOSDrivers/%s" @each-name) )
  332.                     (noposition)
  333.                     (setdefaulttool "c:Mount")
  334.                     ;Delete the "filesystem=" entry
  335.                     ;Case-sensitive!!! (yet another installer bug)
  336.                     (settooltype "FILESYSTEM")
  337.                 )
  338.             )
  339.         )
  340.  
  341.         ;Install Format
  342.         (set mysource ":system/Format")
  343.         (set mydest "sys:system")
  344.         (set mynewname "Format")
  345.         (mycopylib)
  346.  
  347.         ;Install DiskCopy
  348.         (set mysource ":system/DiskCopy" )
  349.         (set mydest "sys:system")
  350.         (set mynewname "DiskCopy")
  351.         (mycopylib)
  352.  
  353.         ;Install the CrossDOS utility
  354.         (copyfiles (source ":system/CrossDOS") (dest "sys:system") (newname "CrossDOS") )
  355.         (copyfiles (source ":system/CrossDOS.info") (dest "sys:system") )
  356.         (tooltype (dest "sys:system/CrossDOS") (noposition) )
  357.  
  358.         ;Copy FileSystem_Trans
  359.         (copyfiles (source ":l/FileSystem_Trans") (dest "l:FileSystem_Trans") (all) )
  360.  
  361.         ;Last copy operation -- copy DiskChg to sys:system
  362.         (copyfiles (source ":system/DiskChg") (dest "sys:system") (infos) )    ;required!!!
  363.         (tooltype (dest "sys:system/DiskChg") (noposition) )
  364.  
  365.         ;Enter mount command in s:user-startup. Previously we did this whenever
  366.         ;installing on a new CD user's system. Now we don't care whether he has
  367.         ;an old CD, but we do avoid inserting it into the u-s if the user is
  368.         ;running Workbench 2.1 or higher, unless we are in expert mode and
  369.         ;the user overrides our wisdom.
  370.  
  371.         (if (and (= @user-level 2) wb21)
  372.             (    (if (askbool
  373.                         (prompt "If you select \"Install\", a command will be "
  374.                                 "inserted into your s:user-startup file to mount "
  375.                                 "all devices in the DOSDrivers drawer. Since you are "
  376.                                 "running Workbench 2.1 or above, however, this command should "
  377.                                 "already be there, unless you have extensively customized your "
  378.                                 "system. Select \"Skip\" to avoid adding a "
  379.                                 "redundant command \(which won't hurt, but will slow down "
  380.                                 "booting\)."
  381.                         )
  382.                         (choices "Install" "Skip")
  383.                         (help "In most cases you should select \"Skip\".")
  384.                     )
  385.                     (    (user 0)
  386.                         (ModifyStartup)
  387.                         (user 2)
  388.                     )
  389.                 )
  390.             )
  391.             (    (if (not wb21) (ModifyStartup) ) )
  392.         )
  393.  
  394.         ;Mount the stuff now so the user can use it immediately
  395.         ;This 'run' is safe because c: is an explicit path
  396.         (run "c:Mount >nil: devs:DOSDrivers/~(#?.info)")
  397.  
  398.         (message "CrossDOS is now installed.")
  399.     )
  400. )
  401.  
  402.  
  403. ;********************** Configure Hard Disk **************************
  404. (procedure ConfigureHardDisk
  405.     (    (if (= 0 (exists "l:CrossDOSFileSystem") )
  406.             (    (message "CrossDOS 6 is not currently installed. It must "
  407.                          "be installed before you can configure a hard drive. "
  408.                          "Switching to CrossDOS installation..."
  409.                 )
  410.                 (InstallCrossDOS)
  411.             )
  412.         )
  413.  
  414.         (set opt (askchoice
  415.                 (choices "Configure on an Amiga Partition"
  416.                          "Configure a 100% MS-DOS Hard Disk"
  417.                          "Configure a Disk File"
  418.                 )
  419.                 (prompt "Please select an option. * Hit HELP for details!!! *")
  420.                 (help "   \"Configure on an Amiga Partition\"\n"
  421.                       "if you want to configure one of your Amiga partitions "
  422.                       "for use as an MS-DOS hard drive image.\n"
  423.                       "    \"Configure a 100% MS-DOS Hard Disk\".\n"
  424.                       "if you want to configure an entire PHYSICAL hard drive "
  425.                       "(such as a SyQuest or Bernoulli etc).\n"
  426.                       "    \"Configure a Disk File\"\n"
  427.                       "if you want to use a file as an MS-DOS disk image (such "
  428.                       "as JLink, MakeAB, PC-Task and AtOnce disk files)."
  429.                 )
  430.             )
  431.         )
  432.  
  433.         ;Run the ConfigDev program
  434.         (if (= opt 0) (set drivetype "PARTITION") )
  435.         (if (= opt 1) (set drivetype "DISK") )
  436.         (if (= opt 2)
  437.             (    (set drivetype "FILE") 
  438.                     ;Install filedisk.device
  439.                 (set mysource "devs/filedisk.device")
  440.                 (set mydest "devs:")
  441.                 (set mynewname "filedisk.device")
  442.                 (mycopylib)
  443.             )
  444.         )
  445.         
  446.         (run ("%sc/ConfigDisk %s" @execute-dir drivetype))
  447.     )
  448. )
  449.  
  450. ;********************** Product Registration **************************
  451. (procedure Register
  452.     (run ("%sc/Registration %sRegistrationInfo" @execute-dir @execute-dir) )
  453. )
  454.  
  455. ;***************************************************************************
  456. ;***************************** MAIN ****************************************
  457. ;***************************************************************************
  458. ;Force user level to 1 or 2. This is unfortuntely required because otherwise
  459. ;we can't present a menu of choices to the user.
  460. (if (= @user-level 0)
  461.     (
  462.         (user 1)
  463.         (set @user-level 0)
  464.     )
  465. )
  466.  
  467. ;Disallow pretend mode
  468. (if @pretend 
  469.     (    (message "Sorry, you can't run the installation in "
  470.                  "\"pretend\" mode. Exiting..."
  471.         )
  472.         (exit (quiet) )
  473.     )
  474. )
  475.  
  476. ;Test whether we can access :l/CrossDOSFileSystem. If not, the user is
  477. ;not running from the product disk - abort.
  478.  
  479. (if (not (exists ":l/CrossDOSFileSystem") ) 
  480.     (    (message "You must run the installation program from the "
  481.                  "CrossDOS disk. Exiting..."
  482.         )
  483.         (exit (quiet) )
  484.     )
  485. )
  486.  
  487. ;Initialize certain variables
  488. (set pcdir "")
  489. (set harddisk "")
  490.  
  491. (set disklabel (expandpath ":") )
  492. (set @execute-dir disklabel)
  493.  
  494. ;get Kickstart version number
  495. (set ksver (/ (getversion "exec.library" (resident) ) 65536 ) )
  496.  
  497. ;set ks20 variable to 1 if running Kickstart 2.04 or above
  498. (set ks20 (> ksver 36) )
  499.  
  500. ;get Workbench version number
  501. (set wbver (/  (getversion "version.library" (resident) ) 65536 ) )
  502.  
  503. ;set wb21 variable to 1 if running Workbench 2.1 or above
  504. (set wb21 (> wbver 37) )
  505.  
  506.  
  507.  
  508. ;Check whether the disk label is "CrossDOS:"; if not, try to relabel the
  509. ;disk.
  510. ;The rename (relabel in this case) command doesn't seem to work...another
  511. ;installer bug?
  512.  
  513. ;(if (not (= disklabel "CrossDOS:") )
  514. ;    (    (rename (disklabel) ("CrossDOS") (disk) ) )
  515. ;)
  516.  
  517.  
  518. (while 1
  519.     (    ;Attempt to determine what the default menu options should be
  520.         (set defmenu 0)
  521.         (if (not (exists "l:CrossDOSFileSystem") )
  522.             (set defmenu (bitor defmenu %00000101) )
  523.         )
  524.  
  525.         ;Ask the user what he wants to install or do.
  526.  
  527.         (set mainopt
  528.             (askoptions
  529.                 (prompt "Please select all functions that you wish to perform")
  530.                 (choices "Install CrossDOS"
  531.                          "Configure Hard Disk"
  532.                          "Fill out Product Registration"
  533.                          "Uninstall CrossDOS"
  534.                 )
  535.                 (default defmenu)
  536.                 (help "The \"Install CrossDOS\" option installs the "
  537.                       "software. The \"Configure MS-DOS Hard Disk\" option will run ConfigDisk, "
  538.                       "which allows you to set up a drive or partition for "
  539.                       "CrossDOS. The \"Fill out Product Registration\" option will "
  540.                       "prompt you for your name and address, and print it to PRT: (the "
  541.                       "default printer). Using the registration software eliminates "
  542.                       "the difficulties we sometimes have reading hand-written registration cards. "
  543.                       "Use the \"Uninstall CrossDOS\" option to remove CrossDOS."
  544.                 )
  545.             )
  546.         )
  547.  
  548.         (if (= mainopt 0)
  549.             (    (message "You didn\'t select anything. Exiting...")
  550.                 (exit (quiet) )
  551.             )
  552.         )
  553.  
  554.         (if    (NOT (and (in mainopt 3) (BITAND mainopt %00000111) ) )
  555.             (    (if (in mainopt 0) (InstallCrossDOS) )
  556.                 (if (in mainopt 1) (ConfigureHardDisk) )
  557.                 (if (in mainopt 2) (Register) )
  558.                 (if (in mainopt 3) (UninstallCrossDOS) )
  559.                 (exit (quiet) )
  560.             )
  561.             (    (message "The UNinstall option cannot be selected in conjunction "
  562.                          "with any other options. Perhaps you accidentally "
  563.                          "selected it."
  564.                 )
  565.             )
  566.         )
  567.     )
  568. )
  569.